<section>
<item>
<attribute name='label' translatable='yes'>_About Bloatpad</attribute>
+ <attribute name='hidden-when'>macos-menubar</attribute>
<attribute name='action'>app.about</attribute>
</item>
</section>
<section>
<item>
<attribute name='label' translatable='yes'>_Quit</attribute>
+ <attribute name='hidden-when'>macos-menubar</attribute>
<attribute name='action'>app.quit</attribute>
</item>
</section>
model,
NO,
YES,
+ YES,
NULL,
menu_item_inserted,
menu_item_removed,
tracker = gtk_menu_tracker_new_for_item_link (trackerItem,
G_MENU_LINK_SUBMENU,
YES,
+ YES,
menu_item_inserted,
menu_item_removed,
self);
gtk_stack_add_named (stack, GTK_WIDGET (box), "main");
box->tracker = gtk_menu_tracker_new (GTK_ACTION_OBSERVABLE (_gtk_widget_get_action_muxer (GTK_WIDGET (box), TRUE)),
- model, TRUE, FALSE, action_namespace,
+ model, TRUE, FALSE, FALSE, action_namespace,
gtk_menu_section_box_insert_func,
gtk_menu_section_box_remove_func, box);
GTK_WIDGET (box), gtk_menu_tracker_item_get_label (item));
gtk_widget_show (GTK_WIDGET (box));
- box->tracker = gtk_menu_tracker_new_for_item_link (item, G_MENU_LINK_SUBMENU, FALSE,
+ box->tracker = gtk_menu_tracker_new_for_item_link (item, G_MENU_LINK_SUBMENU, FALSE, FALSE,
gtk_menu_section_box_insert_func,
gtk_menu_section_box_remove_func,
box);
gtk_widget_show (box->separator);
}
- box->tracker = gtk_menu_tracker_new_for_item_link (item, G_MENU_LINK_SECTION, FALSE,
+ box->tracker = gtk_menu_tracker_new_for_item_link (item, G_MENU_LINK_SECTION, FALSE, FALSE,
gtk_menu_section_box_insert_func,
gtk_menu_section_box_remove_func,
box);
* lazy...
*/
submenu->priv->tracker = gtk_menu_tracker_new_for_item_link (item,
- G_MENU_LINK_SUBMENU, TRUE,
+ G_MENU_LINK_SUBMENU, TRUE, FALSE,
gtk_menu_shell_tracker_insert_func,
gtk_menu_shell_tracker_remove_func,
submenu);
gtk_container_remove (GTK_CONTAINER (menu_shell), menu_shell->priv->children->data);
if (model)
- menu_shell->priv->tracker = gtk_menu_tracker_new (GTK_ACTION_OBSERVABLE (muxer),
- model, with_separators, TRUE, action_namespace,
+ menu_shell->priv->tracker = gtk_menu_tracker_new (GTK_ACTION_OBSERVABLE (muxer), model,
+ with_separators, TRUE, FALSE, action_namespace,
gtk_menu_shell_tracker_insert_func,
gtk_menu_shell_tracker_remove_func,
menu_shell);
struct _GtkMenuTracker
{
GtkActionObservable *observable;
- gboolean merge_sections;
+ guint merge_sections : 1;
+ guint mac_os_mode : 1;
GtkMenuTrackerInsertFunc insert_func;
GtkMenuTrackerRemoveFunc remove_func;
gpointer user_data;
/* Add a separator */
GtkMenuTrackerItem *item;
- item = _gtk_menu_tracker_item_new (tracker->observable, parent_model, parent_index, NULL, TRUE);
+ item = _gtk_menu_tracker_item_new (tracker->observable, parent_model, parent_index, FALSE, NULL, TRUE);
(* tracker->insert_func) (item, offset, tracker->user_data);
g_object_unref (item);
GtkMenuTrackerItem *item;
item = _gtk_menu_tracker_item_new (tracker->observable, model, position + n_items,
+ tracker->mac_os_mode,
section->action_namespace, submenu != NULL);
/* In the case that the item may disappear we handle that by
* @merge_sections: if sections should have their items merged in the
* usual way or reported only as separators (which can be queried to
* manually handle the items)
+ * @mac_os_mode: if this is on behalf of the Mac OS menubar
* @action_namespace: the passed-in action namespace
* @insert_func: insert callback
* @remove_func: remove callback
GMenuModel *model,
gboolean with_separators,
gboolean merge_sections,
+ gboolean mac_os_mode,
const gchar *action_namespace,
GtkMenuTrackerInsertFunc insert_func,
GtkMenuTrackerRemoveFunc remove_func,
tracker = g_slice_new (GtkMenuTracker);
tracker->merge_sections = merge_sections;
+ tracker->mac_os_mode = mac_os_mode;
tracker->observable = g_object_ref (observable);
tracker->insert_func = insert_func;
tracker->remove_func = remove_func;
gtk_menu_tracker_new_for_item_link (GtkMenuTrackerItem *item,
const gchar *link_name,
gboolean merge_sections,
+ gboolean mac_os_mode,
GtkMenuTrackerInsertFunc insert_func,
GtkMenuTrackerRemoveFunc remove_func,
gpointer user_data)
namespace = _gtk_menu_tracker_item_get_link_namespace (item);
tracker = gtk_menu_tracker_new (_gtk_menu_tracker_item_get_observable (item), submenu,
- TRUE, merge_sections, namespace, insert_func, remove_func, user_data);
+ TRUE, merge_sections, mac_os_mode,
+ namespace, insert_func, remove_func, user_data);
g_object_unref (submenu);
g_free (namespace);
GMenuModel *model,
gboolean with_separators,
gboolean merge_sections,
+ gboolean mac_os_mode,
const gchar *action_namespace,
GtkMenuTrackerInsertFunc insert_func,
GtkMenuTrackerRemoveFunc remove_func,
GtkMenuTracker * gtk_menu_tracker_new_for_item_link (GtkMenuTrackerItem *item,
const gchar *link_name,
gboolean merge_sections,
+ gboolean mac_os_mode,
GtkMenuTrackerInsertFunc insert_func,
GtkMenuTrackerRemoveFunc remove_func,
gpointer user_data);
#define HIDDEN_NEVER 0
#define HIDDEN_WHEN_MISSING 1
#define HIDDEN_WHEN_DISABLED 2
+#define HIDDEN_WHEN_ALWAYS 3
enum {
PROP_0,
visible = self->sensitive;
break;
+ case HIDDEN_WHEN_ALWAYS:
+ visible = FALSE;
+ break;
+
default:
g_assert_not_reached ();
}
_gtk_menu_tracker_item_new (GtkActionObservable *observable,
GMenuModel *model,
gint item_index,
+ gboolean mac_os_mode,
const gchar *action_namespace,
gboolean is_separator)
{
self->hidden_when = HIDDEN_WHEN_DISABLED;
else if (g_str_equal (hidden_when, "action-missing"))
self->hidden_when = HIDDEN_WHEN_MISSING;
+ else if (mac_os_mode && g_str_equal (hidden_when, "macos-menubar"))
+ self->hidden_when = HIDDEN_WHEN_ALWAYS;
/* Ignore other values -- this code may be running in context of a
* desktop shell or the like and should not spew criticals due to
GtkMenuTrackerItem * _gtk_menu_tracker_item_new (GtkActionObservable *observable,
GMenuModel *model,
gint item_index,
+ gboolean mac_os_mode,
const gchar *action_namespace,
gboolean is_separator);